package com.zmn.mcc.services.interfaces.role;

import com.zmn.common.dto.StatusDTO;
import com.zmn.mcc.model.entity.role.McRole;
import com.zmn.mcc.model.entity.role.McRoleQuery;
import com.zmn.mcc.model.entity.role.RoleIdAndDayLimit;
import com.zmn.mcc.model.entity.staff.StaffIdAndDeptId;

import java.util.List;

/**
 * @author heguanghua
 * @since 2020/04/14 13:57
 */
public interface RoleService {

    McRole findByKey(Integer roleId);

    List<McRole> listPageByQuery(McRoleQuery query);

    List<McRole> listByType(Integer type);
    List<McRole> listByType(Integer type, Integer status);

    /**
     * 取得指定部门的部门内部角色
     * 限定角色的type为2部门内部角色
     * @param deptId 部门ID
     * @return
     */
    List<McRole> listByDeptId(Integer deptId);
    List<McRole> listByDeptId(Integer deptId, Integer status);

    /**
     * 取得指定多个部门的部门内部角色
     * 限定角色的type为2部门内部角色
     * @param deptIds 多部门ID集合
     * @return
     */
    List<McRole> listByDeptIds(List<Integer> deptIds);
    List<McRole> listByDeptIds(List<Integer> deptIds, Integer status);

    List<McRole> listByQuery(McRoleQuery query);

    /**
     * 批量查询
     *
     * @param ids 角色ID
     * @return
     */
    List<McRole> listByIds(List<Integer> ids);

    List<Integer> listRoleIdByQuery(McRoleQuery query);

    /**
     * 描述: 根据角色id集合、状态查询查询前溯天数
     *
     * @param status 状态 1:停用；2：启用
     * @param roleIdList 员工id集合
     * @return List<RoleIdAndDayLimit>
     * @author xujie
     * @since 2021/05/28
     **/
    List<RoleIdAndDayLimit> listRoleIdAndDayLimitByRoleIdListAndStatus(List<Integer> roleIdList, Integer status);

    Integer countByQuery(McRoleQuery query);


    Integer updateByKey(McRole role);

    Integer updateStatus(Integer roleId, Integer status, String updater);
    Integer updateStatus(McRole role);

    Integer updateStatusBatch(List<Integer> roleIds, Integer status, String updater);
    Integer updateStatusBatch(StatusDTO dto);

    Integer updateSort(Integer roleId, Integer sort);
    Integer updateSort(McRole role);


    Integer insert(McRole role);


    Integer deleteByKey(Integer roleId);
}
